/**
 * 节流：限制函数在指定的时间间隔内只触发一次，如果事件被多次触发，只执行一次回调，其余的忽略。
 * 使用场景：触底请求下一页数据
 * @param {*} fn 
 * @param {*} delay 
 */
function throttle(fn, delay) {
    let _lastTime = 0;
    let _timer = null;

    return function(...args) {
        const nowTime = Date.now();
        if (nowTime - _lastTime >= delay) {
            fn.apply(this, args);
            _lastTime = nowTime;
        } else {
            if (_timer) clearTimeout(_timer);
            _timer = setTimeout(() => {
                fn.apply(this, args);
                _lastTime = nowTime;
                _timer = null;
            }, delay - (nowTime - _lastTime));
        }
    }
}